API 请求工具与封装
目录
简介
lmes-web-base 项目中的 API 请求工具层是一个高度封装的 axios 实例,提供了完整的 HTTP 请求解决方案。该工具层不仅负责基础的网络通信,还集成了权限验证、状态管理、错误处理、加载状态等多个高级功能,为整个应用提供了统一且强大的 API 访问能力。
核心特性包括:
- 自动化的 Authorization 头注入
- Content-Type 标准化处理
- 环境适配的 baseURL 配置
- 携带凭据(withCredentials)支持
- 请求拦截器集成权限校验与加载状态管理
- 响应拦截器统一处理各种错误场景
- 支持取消请求(CancelToken)
- 数据预处理与转换机制
- 国际化错误消息支持
项目架构概览
图表来源
核心请求工具分析
axios 实例配置
// baseURL 环境适配
let baseURL = ''
const params = new URLSearchParams(location.search)
baseURL = baseURL || params.get('baseURL') || ''
console.info('[baseURL]', baseURL)
// axios 实例创建
const service = axios.create({
baseURL,
headers: {},
})
核心配置特点:
- 动态 baseURL 适配:支持通过 URL 参数传递 baseURL,实现多环境部署
- 默认配置简化:移除了超时时间等硬编码配置,保持灵活性
- 空 headers 初始化:避免默认值干扰自定义配置
请求头自动化管理
function appendHeaders(headers = {}) {
function withDefaultHeaders(headers: Record<string, any>) {
const token = Session.get('Token')
const defaultHeaders = {
'Content-Type': 'application/json;charset=UTF-8',
'X-Project': Session.get('X-Project'),
'X-Client-Id': localStorage.getItem('clientId'),
get Authorization() {
return token ? `Bearer ${token}` : undefined
},
get environment() {
return window.app.running ? 'runningtime' : undefined
},
get ['Accept-Language']() {
try {
return Language.getLangReqHeader()
} catch (error) {
return undefined
}
},
}
return Object.assign({}, defaultHeaders, headers)
}
return withDefaultHeaders(headers)
}
节来源
拦截器链详解
请求拦截器流程
图表来源
请求拦截器的核心职责:
- 加载状态管理:通过计数器控制全局加载指示器
- 请求头标准化:自动注入必要的认证和项目标识信息
- 数据格式化:确保 JSON 数据正确序列化
- 静默模式支持:允许禁用加载状态和错误提示
响应拦截器处理流程
图表来源
节来源